﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using SDT.Model;
using SDT.Lib.Common;
using SDT.Lib.Paging;
using SDT.Admin.ViewModels;
using System.Web.Security;
using SDT.Admin.Properties;
using SDT.Lib.Helpers;

namespace SDT.Admin.Controllers
{
	[RoleHelper(Roles = RoleSystem.Dictionary)]
    public class ConvertPriceController : Controller
    {
        //
        // GET: /ConvertPrice/
		SDTDataContext eDataContext = new SDTDataContext();
		public ActionResult Index(int ? page)
		{
			try
			{
					if (!page.HasValue) page = 1;
					string keyword = UserState.getUserStateFromRequest("convertPrice.Keyword", "Keyword", "").ToString();
					int pageSize = int.Parse(UserState.getUserStateFromRequest("convertPrice.pageSize", "PageSize", 20).ToString());
					var Price = eDataContext.ConvertPrices					   
					   .Where(p => (string.IsNullOrEmpty(keyword) ? true :
									(p.ID.ToString().ToLower().Contains(keyword.ToLower().Trim())
									))).ToPagedList(page.Value - 1, pageSize);

					return View(new ConvertPriceViewModels
					{
						ListPrice = Price,
						Keyword = keyword
					});
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}

		#region Create Price
		public ActionResult Create()
		{
			try
			{				
				return View(new CreatePriceViewModels ());
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}

		[HttpPost]
		public ActionResult Create(CreatePriceViewModels cp)
		{
			try
			{
				UpdateModel(cp);
				var CurrentConvertPrice = new ConvertPrice();
				CurrentConvertPrice.AddBy = UserManager.GetUserId();
				CurrentConvertPrice.AddDate = DateTime.Now;
				CurrentConvertPrice.Name = cp.Name;
				if (cp.Min > 0 && cp.Max > 0 && cp.Min > cp.Max)
				{
					ViewData["MessageInfo"] = "Dữ liệu bị lỗi bạn hãy xem lại dữ liệu đầu vào";
					return View();
				}
				if (cp.Min < 0 || cp.Max < 0)
				{
					ViewData["MessageInfo"] = "Dữ liệu bị lỗi bạn hãy xem lại dữ liệu đầu vào";
					return View();
				}
				CurrentConvertPrice.MinValue = cp.Min;
				CurrentConvertPrice.MaxValue = cp.Max;
				eDataContext.ConvertPrices.InsertOnSubmit(CurrentConvertPrice);
				eDataContext.SubmitChanges();
				return RedirectToAction("Index");
			}
			catch (Exception ex)
			{
				ViewData["MessageInfo"] = "Dữ liệu bị lỗi bạn hãy xem lại dữ liệu đầu vào";
				return View();
			}
		}
		#endregion

		#region Edit Price
		public ActionResult Edit(int id)
		{
			try
			{
				if (id < 0) throw new NotSupportedException();
				var ConvertPriceCurrent = eDataContext.ConvertPrices.Where(ca => ca.ID == id).SingleOrDefault();
				return View(new CreatePriceViewModels
				{
					CurrentConvertPrice = ConvertPriceCurrent,
					Max = (Decimal) ConvertPriceCurrent.MaxValue,
                    Min = (Decimal)ConvertPriceCurrent.MinValue,
					Name = ConvertPriceCurrent.Name
				});
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}
		[HttpPost]
		public ActionResult Edit(int id, CreatePriceViewModels cp)
		{
			try
			{
				if (id < 0) throw new NotSupportedException();
				UpdateModel(cp);
				cp.CurrentConvertPrice = eDataContext.ConvertPrices.Where(c => c.ID == id).SingleOrDefault();
				cp.CurrentConvertPrice.Name = cp.Name;
				if (cp.Min > 0 && cp.Max > 0 && cp.Min > cp.Max)
				{

					ViewData["MessageInfo"] = "Dữ liệu bị lỗi bạn hãy xem lại dữ liệu đầu vào";
					return View();
				}
				if (cp.Min < 0 || cp.Max < 0)
				{
					ViewData["MessageInfo"] = "Dữ liệu bị lỗi bạn hãy xem lại dữ liệu đầu vào";
					return View();
				}
				cp.CurrentConvertPrice.MinValue = cp.Min;
				cp.CurrentConvertPrice.MaxValue = cp.Max;
				eDataContext.SubmitChanges();
				return RedirectToAction("Index");
			}
			catch (Exception ex)
			{
				ViewData["MessageInfo"] = "Dữ liệu bị lỗi bạn hãy xem lại dữ liệu đầu vào";
				return View();
			}
		}

		#endregion

		#region Delete Price
		public ActionResult Delete(int id)
		{
			try
			{
					if (id < 0) throw new NotSupportedException();
					var CurrentConvertPrice = eDataContext.ConvertPrices.Where(ca => ca.ID == id).SingleOrDefault();
					return View(CurrentConvertPrice);
			}
			catch (Exception ex)
			{
				ViewData["MessageInfo"] = "Có lỗi xảy ra bạn không thể xóa được";
				return View();
			}
		}
		[HttpPost]
		public ActionResult Delete(int id, FormCollection frm)
		{
			try
			{
				if (id < 0) throw new NotSupportedException();
				var CurrentConvertPrice = eDataContext.ConvertPrices.Where(ca => ca.ID == id).SingleOrDefault();
				eDataContext.ConvertPrices.DeleteOnSubmit(CurrentConvertPrice);
				eDataContext.SubmitChanges();
				return RedirectToAction("Index");
			}
			catch (Exception ex)
			{
				ViewData["MessageInfo"] = "Có lỗi xảy ra bạn không thể xóa được";
				return View();
			}

		}
		#endregion

		#region Detail
		public ActionResult Detail(int id)
		{
			try
			{
				if (id < 0) throw new NotSupportedException();
				var ConvertPriceCurrent = eDataContext.ConvertPrices.Where(ca => ca.ID == id).SingleOrDefault();
				return View(new CreatePriceViewModels
				{
					CurrentConvertPrice = ConvertPriceCurrent,
					Max = (Decimal)ConvertPriceCurrent.MaxValue,    //Vietlv changes int to Decimal
                    Min = (Decimal)ConvertPriceCurrent.MinValue     //Vietlv changes int to Decimal
				});
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}

		#endregion
	}
}
